package day06;

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 编写一个程序，将当前目录下所有员工文件进行读取，并解析出所有员工为Emp
 * 对象并存入集合。然后排序该集合，按照员工的年龄排序，年龄大的靠前，年龄小
 * 的靠后。排序完毕后输出结果。
 * @author Bonnie
 *
 */
public class Test11 {
    public static void main(String[] args) throws IOException, ParseException {
        Test11 t=new Test11();
        //当前目录
        File dir=new File(".");
        List<Emp> list=t.readEmp(dir);
        //解析员工存入集合
        Collections.sort(list,new Comparator<Emp>(){

            @Override
            public int compare(Emp o1, Emp o2) {
                return o2.getAge()-o1.getAge();
            }
        });

        //排序输出
        for (Emp em:list) {
            System.out.println(em);
        }

    }

    private List<Emp> readEmp(File dir) throws IOException, ParseException {
        ArrayList<Emp> list = new ArrayList<>();
        File[] emps = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".emp") ;
            }
        });
        for (File file:emps){
            //将字符串参数解析为 Emp 值,方法在下面
            list.add(parseEmp(file));
        }
        return list;
    }

    private Emp parseEmp(File file) throws IOException, ParseException {
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        //文件多大就创建多大的数组long转int
        byte[] buf = new byte[(int) file.length()];
        //将文件数据全部读取出来并转换为字符串
        int len = raf.read(buf);
        String str = new String(buf, 0, len);
        //解析字符串并转换为Emp对象
        String[] information=str.split(",");
        Emp emp=new Emp();
        emp.setName(information[0]);
        emp.setAge(Integer.parseInt(information[1]));
        emp.setGender(information[2]);
        emp.setSalary(Integer.parseInt(information[3]));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date hiredate=sdf.parse(information[4]);
        emp.setHiredate(hiredate);

        //System.out.println("读取emp成员:" + emp+"成功");
        return emp;
    }


}
